package main

import (
	"math"
	"sort"
)

/*
将nums从小到大排序，如果其长度为l，那么可能存在最大值的地方是
1、如果都是正数，或者都是负数，那么最大值是nums[l-1] * nums[l-2] * nums[l-3]
2、如果有正数，有负数，那么最大值可能是：
1）nums[0]*nums[1]*nums[l-1]，即最小的两个负数（也是负数中绝对值最大的）的积，乘以最大的正数
2）nums[l-1] * nums[l-2] * nums[l-3]，即如果最大的三个正数，乘积也可能大于上面的情况

所以，咱们只要比较这两个值就好了


nums[0] * nums[1] * nums[l-1]
nums[l-1] * nums[l-2] * nums[l-3]

*/
func maximumProduct(nums []int) int {
	sort.Ints(nums)
	l := len(nums)
	return int(math.Max(float64(nums[0]*nums[1]*nums[l-1]), float64(nums[l-1]*nums[l-2]*nums[l-3])))
}

func main() {

}
